﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sealight.Core.Domain;
using Sealight.Core.DataAdapter;
namespace Sealight.CoreAPI
{
    public interface IProductService
    {
        IList<product> GetAllProducts();
        product AddOrUpdate(product item);
        product GetProductByID(Guid id);
        void Delete(product item);
        picture AddPictureToProduct(picture pic, Guid pro_id);
        product_variant AddOrUpdateProductVariant(product_variant item);
        product_variant GetProductVariantByID(Guid id);
        void AddPictureToProductVariant(Guid picture_id, Guid product_variant_id);
        void RemovePictureFromProduct(IList<Guid> picture_id, Guid productId);
        void RemovePictureFromProduct(Guid picture_id, Guid productId);
        product_category AddOrUpdateCategory(product_category data);
        IList<product_category_map> MapCategoryToProduct(IList<product_category_map> category, Guid id);
        product_review AddReview(product_review data);
        product_rating AddRating(product_rating data);
        product_attribute AddProductAttribute(product_attribute data);
        product_variant_attribute AddProductVariantAttribute(product_variant_attribute data);
        product_variant_attribute_value AddProductVariantAttributeValue(product_variant_attribute_value data);
        specification_attribute AddSpecificationAttribute(specification_attribute data);
        specification_attribute_option AddSpecificationAttributeOption(specification_attribute_option data);
        product_specification_attribute MapProductSpecificationAttribute(product_specification_attribute data);
        IList<product_attribute> GetAllProductAttribute();
        product_attribute GetProductAttribute(Guid id);
        void DeleteProductAttribute(Guid id);
        IList<product_category> GetAllCategoryByParentId(Guid parentId);
        IList<specification_attribute> GetAllSpecificationProductAttribute();
        IList<product_category> GetAllCategory();
        void DeleteSpecificationAttribute(Guid id);
        IList<specification_attribute_option> GetAllOptionBySpecificationId(Guid id);
        void DeleteSpecificationAttributeOption(Guid id);
        IList<related_product> GetRelatedProducts(Guid productId);
        void AddRelatedProduct(related_product item);
        IList<product> SearchProduct(string keyword, Guid categoryId);
        IList<product_variant_attribute> GetProductVariantAttribute(Guid productVariantId);
        void DeleteProductVariantAttribute(Guid id);
        IList<product_variant_attribute_value> GetProductVariantAttributeValue(Guid productVariantAttributeId);
        void DeleteProductVariantAttributeValue(Guid id);
        IList<product_specification_attribute> GetSpecificationOptionAttributeForProduct(Guid id);
        void DeleteProductSpecificationAttribute(Guid id);
        product_specification_attribute GetProductSpecificationAttribute(Guid id);
        void DeleteCategoryMapToProduct(Guid id);
        void DeletePictureMapToProduct(Guid id);
        product_category GetCategoryById(Guid id);
        void DeleteCategory(Guid id);
        void RemoveRelatedProduct(Guid id);
    }
}
